package com.atmosphere.interfaces.component;

import com.jme.renderer.ColorRGBA;
import com.jme.scene.state.LightState;

/**
 * <code>ILightingComponent</code> defines the interface of the
 * component unit that is responsible for maintaining a single
 * light source and animating it to rotate around a given axis
 * at a given rate and transit between a set of day, night and
 * transition colors to simulate dynamic lighting for atmosphere
 * system.
 * <p>
 * <code>ILightingComponent</code> provides the functionality to
 * properly setup the rotation properties of the maintained light.
 * It also provides the logic to properly update the direction
 * of the light based on update time.
 * <p>
 * <code>ILightingComponent</code> provides the functionality to
 * maintain its own internal light state. However, a different
 * light state can be passed in at construction time to allow
 * lighting component use that state instead.
 *
 * @author Yi Wang (Neakor)
 * @version Creation date: 05-20-2009 14:20 EST
 * @version Modified date: 05-20-2009 18:33 EST
 */
public interface ILightingComponent extends IAbstractAstronomy {
	
	/**
	 * Set the day color.
	 * @param color The <code>ColorRGBA</code> to be set.
	 */
	public void setDayColor(ColorRGBA color);
	
	/**
	 * Set the night color.
	 * @param color The <code>ColorRGBA</code> to be set.
	 */
	public void setNightColor(ColorRGBA color);
	
	/**
	 * Set the transition color between day and night time.
	 * @param color The <code>ColorRGBA</code> to be set.
	 */
	public void setTransitionColor(ColorRGBA color);
	
	/**
	 * Set if the global ambient lighting should be updated.
	 * @param update The <code>Boolean</code> flag.
	 */
	public void setUpdateAmbient(boolean update);
	
	/**
	 * Retrieve the light state.
	 * @return The <code>LightState</code> instance.
	 */
	public LightState getLightState();
	
	/**
	 * Retrieve the day color.
	 * @return The day <code>ColorRGBA</code>.
	 */
	public ColorRGBA getDayColor();
	
	/**
	 * Retrieve the night color.
	 * @return The night <code>ColorRGBA</code>.
	 */
	public ColorRGBA getNightColor();
	
	/**
	 * Retrieve the transition color.
	 * @return The transition <code>ColorRGBA</code>.
	 */
	public ColorRGBA getTransitionColor();
}
